/******************************************************************
 *
 *	CyberUPnP for Java
 *
 *	Copyright (C) Satoshi Konno 2002
 *
 *	File: Subscriber.java
 *
 *	Revision;
 *
 *	01/29/03
 *		- first revision.
 *	07/31/04
 *		- Added isExpired().
 *	10/26/04
 *		- Oliver Newell <newell@media-rush.com>
 *		- Added support the intinite time and fixed a bug in isExpired().
 *	
 ******************************************************************/

package org.cybergarage.upnp.event;

import java.net.URL;

public class Subscriber
{
    // //////////////////////////////////////////////
    // Constructor
    // //////////////////////////////////////////////

    public Subscriber()
    {
        renew();
    }

    // //////////////////////////////////////////////
    // SID
    // //////////////////////////////////////////////

    private String SID = null;

    public String getSID()
    {
        return SID;
    }

    public void setSID(String sid)
    {
        SID = sid;
    }

    // //////////////////////////////////////////////
    // deliveryURL
    // //////////////////////////////////////////////

    private String ifAddr = "";

    public void setInterfaceAddress(String addr)
    {
        ifAddr = addr;
    }

    public String getInterfaceAddress()
    {
        return ifAddr;
    }

    // //////////////////////////////////////////////
    // deliveryURL
    // //////////////////////////////////////////////

    private String deliveryURL = "";

    public String getDeliveryURL()
    {
        return deliveryURL;
    }

    public void setDeliveryURL(String deliveryURL)
    {
        this.deliveryURL = deliveryURL;
        try
        {
            URL url = new URL(deliveryURL);
            deliveryHost = url.getHost();
            deliveryPath = url.getPath();
            deliveryPort = url.getPort();
        }
        catch (Exception e)
        {
        }
    }

    private String deliveryHost = "";
    private String deliveryPath = "";
    private int    deliveryPort = 0;

    public String getDeliveryHost()
    {
        return deliveryHost;
    }

    public String getDeliveryPath()
    {
        return deliveryPath;
    }

    public int getDeliveryPort()
    {
        return deliveryPort;
    }

    // //////////////////////////////////////////////
    // Timeout
    // //////////////////////////////////////////////

    private long timeOut = 0;

    public long getTimeOut()
    {
        return timeOut;
    }

    public void setTimeOut(long value)
    {
        timeOut = value;
    }

    public boolean isExpired()
    {
        long currTime = System.currentTimeMillis();

        // Thanks for Oliver Newell (10/26/04)
        if (timeOut == Subscription.INFINITE_VALUE)
            return false;

        // Thanks for Oliver Newell (10/26/04)
        long expiredTime = getSubscriptionTime() + getTimeOut() * 1000;
        if (expiredTime < currTime)
            return true;

        return false;
    }

    // //////////////////////////////////////////////
    // SubscriptionTIme
    // //////////////////////////////////////////////

    private long subscriptionTime = 0;

    public long getSubscriptionTime()
    {
        return subscriptionTime;
    }

    public void setSubscriptionTime(long time)
    {
        subscriptionTime = time;
    }

    // //////////////////////////////////////////////
    // SEQ
    // //////////////////////////////////////////////

    private long notifyCount = 0;

    public long getNotifyCount()
    {
        return notifyCount;
    }

    public void setNotifyCount(int cnt)
    {
        notifyCount = cnt;
    }

    public void incrementNotifyCount()
    {
        if (notifyCount == Long.MAX_VALUE)
        {
            notifyCount = 1;
            return;
        }
        notifyCount++ ;
    }

    // //////////////////////////////////////////////
    // renew
    // //////////////////////////////////////////////

    public void renew()
    {
        setSubscriptionTime(System.currentTimeMillis());
        setNotifyCount(0);
    }

}
